package admin

import (
	"blogApi/controllers"
	. "blogApi/models"
	"encoding/json"
	"strings"
)

// CategoryController 控制器
type CategoryController struct {
	controllers.BaseController
}

// Index 获取文章列表
func (cont *CategoryController) Index() {
	page, pageErr := cont.GetInt("page")
	status, statusErr := cont.GetInt("status")
	limit, limitErr := cont.GetInt("limit")
	if pageErr != nil {
		page = 1
	}
	if limitErr != nil {
		limit = 10
	}
	query := Db.Model(&Category{})
	//查询条件
	if name := strings.TrimSpace(cont.GetString("keywords")); name != "" {
		query.Where("name LIKE ?", "%"+name+"%")
	}
	if statusErr == nil {
		query.Where("status = ?", status)
	}
	offset := (page - 1) * limit
	// 总数
	var total int64
	// 返回数据
	list := make([]*Category, 0)
	query.Count(&total)
	query.Order("id desc").Offset(offset).Limit(limit).Find(&list)
	resMap := make(map[string]interface{})
	resMap["list"] = list
	resMap["total"] = total
	cont.ResJson(0, "获取成功", resMap, nil)
}

func (cont *CategoryController) Store() {
	if cont.Ctx.Input.IsPost() == false {
		cont.ResJson(1, "请求方式错误", nil, nil)
	}
	var input Category
	// 获取 axios 传递的参数
	data := cont.Ctx.Input.RequestBody
	err := json.Unmarshal(data, &input)
	if err != nil {
		cont.ResJson(1, "json转化失败", err.Error(), nil)
	}
	// 验证
	if msg := input.SelfValid(); msg != nil {
		cont.ResJson(1, msg, input, nil)
	}
	info := Category{Name: input.Name, Description: input.Description, Keywords: input.Keywords, Pid: input.Pid, Sort: input.Sort}
	if result := Db.Debug().Create(&info); result.Error != nil {
		cont.ResJson(1, "操作失败", result.Error, nil)
	}
	cont.ResJson(0, "操作成功", info, nil)
}

func (cont *CategoryController) Update() {
	if cont.Ctx.Input.IsPut() == false {
		cont.ResJson(1, "请求方式错误", nil, nil)
	}
	var input Category
	// 接收参数
	if err := cont.ParseForm(&input); err != nil {
		cont.ResJson(1, "参数解析失败", nil, nil)
	}
	// 验证
	if msg := input.SelfValid(); msg != nil {
		cont.ResJson(1, msg, input, nil)
	}
	if result := Db.Model(&Category{}).Where("id = ?", input.Id).Select("Slug", "Name", "Keywords", "Description", "Sort", "Pid", "Updated_at", "Status").Updates(input); result.Error != nil {
		cont.ResJson(1, "存入失败", result.Error, nil)
	}
	cont.ResJson(0, "操作成功", input, nil)
}

/**
*删除
 */
func (cont *CategoryController) Destroy() {
	if cont.Ctx.Input.IsDelete() == false {
		cont.ResJson(1, "请求方式错误", nil, nil)
	}
	id := cont.Input().Get("id")
	var input Category
	if result := Db.Debug().Where("id = ?", id).Delete(&Category{}); result.Error != nil {
		cont.ResJson(1, "操作失败", result.Error, nil)
	}
	cont.ResJson(0, "操作成功", input, nil)
}
